package com.xoa.util.treeUtil;


import java.util.Arrays;
import java.util.Map;

public class CheckTree {



	/**
	 * 
	 * 创建作者:   杨 胜
	 * 创建日期:   2017-4-26 上午10:01:17
	 * 方法介绍:   验证目录树权限公共方法
	 * 参数说明:   @param checkString
	 * 参数说明:   @param map
	 * 参数说明:   @return
	 * @return     boolean
	 */
	/*public static boolean checkAll(String checkString,Map<String,Object> map){
		//"|"转义字符串  所以必须用\\进行转义 因为 而且取出数组长度不确定
	   String[] checkStrings=(checkString==null?"":checkString).split("\\|");
	   if(checkStrings.length==0){
		   return false;
	   }
	     //数组长度为1时 说明此时角色和用户Id权限为空
	   if(checkStrings.length==1){
		   String[]  checkDept=checkStrings[0].split(",");
		   for(int i=0;i<checkDept.length;i++){
			   //调用校验部门方法  传值为部门id
			   if(checkDeptPriv(checkDept[i],map.get("deptId").toString())){
				   return true;
			   }
		   }
	   }
	     //数组长度为2时 说明此时角色和用户Id权限为空
	   if(checkStrings.length==2){
		   String[]  checkDept=checkStrings[0].split(",");
		   for(int i=0;i<checkDept.length;i++){
			   //调用校验部门范围方法  传值为部门id
			   if(checkDeptPriv(checkDept[i],map.get("deptId").toString())){
				   return true;
			   }
		   }
		   String[]  checkUserPriv=checkStrings[1].split(",");
		   for(int i=0;i<checkUserPriv.length;i++){
			   //调用校验角色范围方法  传值为角色id
			   if(checkUserPriv(checkUserPriv[i],map.get("userPriv").toString())){
				   return true;
			   }
		   }
	   }
	     //数组长度为3时 说明此时部门、角色和用户Id权限都不为空
	   if(checkStrings.length==3){
		   String[]  checkDept=checkStrings[0].split(",");
		   for(int i=0;i<checkDept.length;i++){
			   //调用校验部门范围方法  传值为部门id
			   if(checkDeptPriv(checkDept[i],map.get("deptId").toString())){
				   return true;
			   }
		   }
		   String[]  checkUserPriv=checkStrings[1].split(",");
		   for(int i=0;i<checkUserPriv.length;i++){
			   //调用校验角色范围方法  传值为角色id
			   if(checkUserPriv(checkUserPriv[i],map.get("userPriv").toString())){
				   return true;
			   }
		   }
		   String[]  checkUserId=checkStrings[2].split(",");
		   for(int i=0;i<checkUserId.length;i++){
			   //调用校验用户范围方法  传值为用户id
			   if(checkUserId(checkUserId[i],map.get("userId").toString())){
				   return true; 
			   }
		   }
	   }
        //
		return false;
	}*/

	public static boolean checkAll(String checkString,Map<String,Object> map){
		//"|"转义字符串  所以必须用\\进行转义 因为 而且取出数组长度不确定
		String[] checkStrings=(checkString==null?"":checkString).split("\\|");
		if(checkStrings.length==0){
			return false;
		}
		//数组长度为1时 说明此时角色和用户Id权限为空
		if(checkStrings.length==1){
			if(checkStrings[0].equals("ALL_DEPT")){
				return true;
			}
			String[]  checkDept=checkStrings[0].split(",");
			if( Arrays.asList(checkDept).contains(map.get("deptId").toString())){
				return true;
			}
			if (privOtherDept(String.valueOf(map.get("deptIdOther")),checkDept).equals("yes")){
				return true;
			}
		}
		//数组长度为2时 说明此时角色和用户Id权限为空
		if(checkStrings.length==2){
			if(checkStrings[0].equals("ALL_DEPT")){
				return true;
			}
			String[]  checkDept=checkStrings[0].split(",");
			if(Arrays.asList(checkDept).contains(map.get("deptId").toString())){
				return true;
			}
			if (privOtherDept(String.valueOf(map.get("deptIdOther")),checkDept).equals("yes")){
				return true;
			}
			String[]  checkUserPriv=checkStrings[1].split(",");
			if( Arrays.asList(checkUserPriv).contains(map.get("userPriv").toString())){
				return true;
			}
			if (privOtherUsers(String.valueOf(map.get("userPrivOther")),checkUserPriv).equals("yes")){
				return true;
			}

		}
		//数组长度为3时 说明此时部门、角色和用户Id权限都不为空
		if(checkStrings.length==3){
			if(checkStrings[0].equals("ALL_DEPT")){
				return true;
			}
			String[]  checkDept=checkStrings[0].split(",");
			if(Arrays.asList(checkDept).contains(map.get("deptId").toString())){
				return true;
			}
			if (privOtherDept(String.valueOf(map.get("deptIdOther")),checkDept).equals("yes")){
				return true;
			}

			String[]  checkUserPriv=checkStrings[1].split(",");
			if( Arrays.asList(checkUserPriv).contains(map.get("userPriv").toString())){
				return true;
			}
			if (privOtherUsers(String.valueOf(map.get("userPrivOther")),checkUserPriv).equals("yes")){
				return true;
			}

			String[]  checkUserId=checkStrings[2].split(",");
			if( Arrays.asList(checkUserId).contains(map.get("userId").toString())){
				return true;
			}
		}
		//
		return false;
	}

	public static String privOtherDept(String deptIdOther, String[] checkDept){
		if (!deptIdOther.equals("")){
			String[] strObj = deptIdOther.split(",");
			for (String str:strObj ) {
				if (Arrays.asList(checkDept).contains(str)){
					return "yes";
				}
			}
		}
		return "no";
	}
	public static String privOtherUsers(String userPrivOther,String[]  checkUserId){
		if (!userPrivOther.equals("")){
			String[] strObj = userPrivOther.split(",");
			for (String str:strObj ) {
				if (Arrays.asList(checkUserId).contains(str)){
					return "yes";
				}
			}
		}

		return "no";
	}













	
	/**
	 * 
	 * 创建作者:   杨 胜
	 * 创建日期:   2017-4-26 上午9:21:36
	 * 方法介绍:   检查部门权限Id
	 * 参数说明:   @param DeptId 
	 * 参数说明:   @param deptIdOfuser_Id
	 * 参数说明:   @return
	 * @return     boolean
	 */
	public static boolean checkDeptPriv(String DeptId,String deptIdOfuser_Id){
		//如果部门部分权限为“ALL_DEPT" 则部门范围有访问权限。将直返回return true；停止执行程序
		if("ALL_DEPT".equals(DeptId)||"ALL_DEPT"==DeptId){
			return true;
		}
		//如果部门部分权限为拼接字符串则将字符串拆开验证 ，如果登录人员匹配得所属部门则将直返回return true；停止执行程序
		if(DeptId!=null&&!"".equals(DeptId)){
		    	if(deptIdOfuser_Id.equals(DeptId)){
		    		return true;
		    	}
		}
		//如果部门字符串为其他类型 证明其无权限访问return false;
		return false;
	}
	/**
	 * 
	 * 创建作者:   杨 胜
	 * 创建日期:   2017-4-26 上午9:54:36
	 * 方法介绍:   检查角色权限Id
	 * 参数说明:   @param userPriv 角色id
	 * 参数说明:   @param userPrivOfuser_Id 角色字符串
	 * 参数说明:   @return
	 * @return     boolean
	 */
	public static boolean checkUserPriv(String userPriv,String userPrivOfuser_Id){
		//角色部分权限为拼接字符串，将字符串拆开验证 ，如果登录人员匹配得所属部门则将直接返回return true；停止执行程序
		if(userPriv!=null&&!"".equals(userPriv)){
		    	if(userPrivOfuser_Id.equals(userPriv)){
		    		return true;
		    	}
		}
		//如果角色部分字符串为其他类型  证明其无权限访问return false;
		return false;
	}
	/**
	 * 
	 * 创建作者:   杨 胜
	 * 创建日期:   2017-4-26 上午9:57:41
	 * 方法介绍:   人员权限验证
	 * 参数说明:   @param userId 人员userId
	 * 参数说明:   @param userIdOfuser_Id
	 * 参数说明:   @return boolean
	 * @return     boolean
	 */
	public static boolean checkUserId(String userId,String userIdOfuser_Id){
		//如果部门部分权限为拼接字符串则将字符串拆开验证 ，如果登录人员匹配得所属部门则将直返回return true；停止执行程序
		if(userId!=null&&!"".equals(userId)){
		    	if(userIdOfuser_Id.equals(userId)){
		    		return true;
		    }
		}
		//如果部门字符串为其他类型 证明其无权限访问return false;
		return false;
	}
}
